#include "PersonnageHero_private.h"

/* Internal */
PersonnageHeroExt* persoHero_getExt(Personnage* perso){
	if(perso == NULL) return NULL;
	
	return (PersonnageHeroExt*)perso->ext;
}

/* Constructor */
Personnage* newPersonnageHero(int exp,int vie,Pouvoir* pouvoir,Case* c,Joueur* joueur){
	Personnage* perso;
	PersonnageHeroExt* phe;
	
	perso = newPersonnage(exp,vie,pouvoir,c,joueur);
	perso->getTypeNom = persoHeroGetTypeNom;
	
	phe = emalloc(sizeof(PersonnageHeroExt));
	if(phe == NULL) return NULL;
	
	persoSetExt(perso,phe);
	perso->free = freePersonnageHero;
	
	return perso;
}

/* Destructor */
void freePersonnageHero(Personnage* perso){
	PersonnageHeroExt* phe;
	if(persoGetType(perso) != tpHero) return;
	
	phe = persoHero_getExt(perso);
	if(phe->free)
		phe->free(perso);
	free(phe);
}

/* Getters */
const char* persoHeroGetTypeNom(Personnage* perso){
	if(perso == NULL) return "";
	
	return "Hero";
}

TypePersoHero persoHeroGetType(Personnage* perso){
	if(perso == NULL) return tphUndefined;
	
	return persoHero_getExt(perso)->type;
}

void* persoHeroGetExt(Personnage* perso){
	if(perso == NULL) return NULL;
	
	return persoHero_getExt(perso)->ext;
}

/* Settlers */
void persoHeroSetType(Personnage* perso,TypePersoHero type){
	if(perso == NULL) return;
	
	persoHero_getExt(perso)->type = type;
}

void persoHeroSetExt(Personnage* perso,void* ext){
	if(perso == NULL) return;
	
	persoHero_getExt(perso)->ext = ext;
}
